package com.ruoyi.site.service.impl;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.ruoyi.site.domain.FilterOptions;
import com.ruoyi.site.domain.Genres;
import com.ruoyi.site.domain.Moods;
import com.ruoyi.site.domain.Sfx;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.site.mapper.SfxMapper;
import com.ruoyi.site.service.ISfxService;

/**
 * 音效Service业务层处理
 * * @author chuckeytang
 * @date 2025-08-17
 */
@Service
public class SfxServiceImpl implements ISfxService
{
    @Autowired
    private SfxMapper sfxMapper;

    /**
     * 查询音效
     * * @param sfxId 音效主键
     * @return 音效
     */
    @Override
    public Sfx selectSfxBySfxId(Long sfxId)
    {
        return sfxMapper.selectSfxBySfxId(sfxId);
    }

    /**
     * 查询音效列表
     * * @param sfx 音效
     * @return 音效
     */
    @Override
    public List<Sfx> selectSfxList(Sfx sfx)
    {
        return sfxMapper.selectSfxList(sfx);
    }

    /**
     * 新增音效
     * * @param sfx 音效
     * @return 结果
     */
    @Override
    public int insertSfx(Sfx sfx)
    {
        return sfxMapper.insertSfx(sfx);
    }

    /**
     * 修改音效
     * * @param sfx 音效
     * @return 结果
     */
    @Override
    public int updateSfx(Sfx sfx)
    {
        return sfxMapper.updateSfx(sfx);
    }

    /**
     * 批量删除音效
     * * @param sfxIds 需要删除的音效主键
     * @return 结果
     */
    @Override
    public int deleteSfxBySfxIds(Long[] sfxIds)
    {
        return sfxMapper.deleteSfxBySfxIds(sfxIds);
    }

    /**
     * 删除音效信息
     * * @param sfxId 音效主键
     * @return 结果
     */
    @Override
    public int deleteSfxBySfxId(Long sfxId)
    {
        return sfxMapper.deleteSfxBySfxId(sfxId);
    }

    /**
     * 获取所有可用的筛选器选项
     */
    @Override
    public FilterOptions getFilterOptions() {
        FilterOptions options = new FilterOptions();

        // 1. 获取所有流派
        List<Genres> genres = sfxMapper.selectAllGenresWithCounts();
        options.setGenres(genres);

        // 2. 获取所有情绪
        List<Moods> moods = sfxMapper.selectAllMoodsWithCounts();
        options.setMoods(moods);

        // 3. 获取所有艺术家，并转换为 Map 列表
        List<Sfx> artistsFromDb = sfxMapper.selectAllArtistsWithCounts();
        List<Map<String, Object>> artists = artistsFromDb.stream()
                .map(sfx -> {
                    Map<String, Object> artistMap = new HashMap<>(); // 使用 HashMap
                    artistMap.put("artist", sfx.getArtist());
                    artistMap.put("count", sfx.getCount());
                    return artistMap;
                })
                .collect(Collectors.toList());
        options.setArtists(artists);

        // 4. 获取持续时间范围
        options.setMinBpm(null); // 音效不需要BPM
        options.setMaxBpm(null);
        options.setMinDuration(0L);
        options.setMaxDuration(10L); // 音效最长10秒

        return options;
    }

    /**
     * 根据 ID 获取标准价格
     */
    @Override
    public BigDecimal getStandardPriceBySfxId(Long sfxId) {
        // 直接调用 Mapper 方法
        return sfxMapper.selectStandardPriceBySfxId(sfxId);
    }
}